package com.ym.b2b.ws.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.alibaba.druid.util.StringUtils;

/**
 * 日期处理工具
 * 
 * @Company 杭州珍诚网络科技有限公司
 * @Author 黄展鹏
 * @Version HZP 2014-10-29
 */
public class DateUtil {
    public static final String PATTERN_DATE = "yyyy-MM-dd";
    public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";

    /**
     * 日期转字符串
     * 
     * @param date
     * @return 字符串格式yyyy-MM-dd HH:mm:ss
     */
    public static String format(Date date) {
        return format(date, PATTERN_DATETIME);
    }

    /**
     * 日期转字符串
     * 
     * @param date
     * @param pattern
     * @return
     */
    public static String format(Date date, String pattern) {
        if(date==null){
            return null;
        }
        if(StringUtils.isEmpty(pattern)){
            pattern = PATTERN_DATETIME;
        }
        DateFormat df = new SimpleDateFormat(pattern);
        return df.format(date);
    }

    /**
     * 字符串转日期
     * 
     * @param date 字符串格式yyyy-MM-dd
     * @return
     */
    public static Date parse(String date) {
        return parse(date, PATTERN_DATE);
    }

    /**
     * 字符串转日期
     * 
     * @param date
     * @param pattern
     * @return
     */
    public static Date parse(String date, String pattern) {
        if(date == null){
            return null;
        }
        if(pattern == null){
            pattern = PATTERN_DATETIME;
        }
        DateFormat df = new SimpleDateFormat(pattern);
        try {
            return df.parse(date);
        } catch (ParseException e) {
            return null;
        }
    }
    
    /**
     * 当前日期
     * @return 字符串格式yyyy-MM-dd
     */
    public static String today() {
    	return format(new Date(), PATTERN_DATE);
    }
    
    /**
     * 当前日期时间
     * @return 字符串格式yyyy-MM-dd HH:mm:ss
     */
    public static String current() {
    	return format(new Date());
    }
    
    /**
     * 增加年份
     * @return
     */
    public static Date addYear(Date date, int add) {
    	if(date==null || add==0){
    		return null;
    	}
    	String today = format(date, PATTERN_DATE);
    	int year = Integer.valueOf(today.split("-")[0]);
    	int month = Integer.valueOf(today.split("-")[1]);
    	int day = Integer.valueOf(today.split("-")[2]);
    	String result = null;
    	if((year%4==0 && year%100!=0 || year%400==0) && month==2 && day==29 && add%4!=0){
    		result = (year+add)+"-02-28";
    	}else{
    		result = (year+add)+"-"+month+"-"+day;
    	}
    	return parse(result, PATTERN_DATE);
    }
    
}